<?php
/**
 * @author		João Batista Neto
 * @brief		Classes e interfaces utilitárias
 * @package		rpo.composite
 */

require_once 'rpo/util/RecursiveObjectIterator.php';

/**
 * @brief	Iterator recursivo de componentes
 * @class	RecursiveComponentIterator
 */
class RecursiveComponentIterator extends RecursiveObjectIterator {
	/**
	 * @brief	Verifica se um objeto é aceitável para o Iterator antes de adicioná-lo
	 * @return	boolean
	 */
	protected function accept( IObject $object ){
		return $object->getClass()->isSubclassOf( 'Component' );
	}

	/**
	 * @brief	Recupera um Iterator para os filhos do item atual
	 * @return	BuscapeRecursiveComponentIterator
	 * @see		RecursiveIterator.getChildren()
	 */
	public function getChildren(){
		return new RecursiveComponentIterator( $this->current()->getIterator() );
	}

	/**
	 * @brief	Recupera um Iterator de iteratores recursivo
	 * @return	RecursiveComponentIteratorIterator
	 * @see		rpo.util.RecursiveObjectIterator.getRecursiveIterator()
	 */
	public function getRecursiveIterator(){
		return new RecursiveComponentIteratorIterator( $this );
	}
}